home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / shells / sh03src.zoo / sh-pl03 / sh / init.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-23  |  4.4 KB  |  225 lines

  1. /*
  2.  * This file was generated by the mkinit program.
  3.  */
  4.  
  5. #include "shell.h"
  6. #include "mystring.h"
  7. #include "eval.h"
  8. #include "input.h"
  9. #include "error.h"
  10. #include "options.h"
  11. #include "redir.h"
  12. #include "signames.h"
  13. #include "trap.h"
  14. #include "output.h"
  15. #include "memalloc.h"
  16. #include "var.h"
  17.  
  18.  
  19.  
  20. #define MAXPWD 256
  21. #define main echocmd
  22. #define ALL (E_OPEN|E_CREAT|E_EXEC)
  23. #define EV_EXIT 01        /* exit after evaluating tree */
  24. #define EV_TESTED 02        /* exit status is checked; ignore -e flag */
  25. #define EV_BACKCMD 04        /* command executing within back quotes */
  26. #define SKIPBREAK 1
  27. #define SKIPCONT 2
  28. #define SKIPFUNC 3
  29. #define CMDTABLESIZE 31        /* should be prime */
  30. #define ARB 1            /* actual size determined at run time */
  31. #define NEWARGS 5
  32. #define MAXLOGNAME 32
  33. #define MAXPWLINE 128
  34. #define EOF_NLEFT -99        /* value of parsenleft when EOF pushed back */
  35. #define MAXMBOXES 10
  36. #define PROFILE 0
  37. #define MINSIZE 504        /* minimum size of a block */
  38. #define EOFMARKLEN 79
  39. #define GDB_HACK 1 /* avoid local declarations which gdb can't handle */
  40. #define EMPTY -2        /* marks an unused slot in redirtab */
  41. #define PIPESIZE 4096        /* amount of buffering in a pipe */
  42. #define S_DFL 1            /* default signal handling (SIG_DFL) */
  43. #define S_CATCH 2        /* signal is caught */
  44. #define S_IGN 3            /* signal is ignored (SIG_IGN) */
  45. #define S_HARD_IGN 4        /* signal is ignored permenantly */
  46. #define OUTBUFSIZ BUFSIZ
  47. #define BLOCK_OUT -2        /* output to a fixed block of memory */
  48. #define MEM_OUT -3        /* output to dynamically allocated memory */
  49. #define OUTPUT_ERR 01        /* error occurred on output */
  50. #define TEMPSIZE 24
  51. #define VTABSIZE 39
  52.  
  53.  
  54.  
  55. extern int evalskip;        /* set if we are skipping commands */
  56. extern int loopnest;        /* current loop nesting level */
  57.  
  58. extern void deletefuncs();
  59.  
  60. struct parsefile {
  61.     int linno;        /* current line */
  62.     int fd;            /* file descriptor (or -1 if string) */
  63.     int nleft;        /* number of chars left in buffer */
  64.     char *nextc;        /* next char in buffer */
  65.     struct parsefile *prev;    /* preceding file on stack */
  66.     char *buf;        /* input buffer */
  67. };
  68.  
  69. extern int parsenleft;        /* copy of parsefile->nleft */
  70. extern struct parsefile basepf;    /* top level input file */
  71.  
  72. extern short backgndpid;    /* pid of last background process */
  73. extern int jobctl;
  74.  
  75. extern int tokpushback;        /* last token pushed back */
  76.  
  77. struct redirtab {
  78.     struct redirtab *next;
  79.     short renamed[10];
  80. };
  81.  
  82. extern struct redirtab *redirlist;
  83.  
  84. extern char sigmode[MAXSIG];    /* current value of signal */
  85.  
  86. extern void shprocvar();
  87.  
  88.  
  89.  
  90. /*
  91.  * Initialization code.
  92.  */
  93.  
  94. void
  95. init() {
  96.  
  97.       /* from input.c: */
  98.       {
  99.           extern char basebuf[];
  100.  
  101.           basepf.nextc = basepf.buf = basebuf;
  102.       }
  103.  
  104.       /* from var.c: */
  105.       {
  106.           char **envp;
  107.           extern char **environ;
  108.  
  109.           initvar();
  110.           for (envp = environ ; *envp ; envp++) {
  111.               if (strchr(*envp, '=')) {
  112.                   setvareq(*envp, VEXPORT|VTEXTFIXED);
  113.               }
  114.           }
  115.       }
  116. }
  117.  
  118.  
  119.  
  120. /*
  121.  * This routine is called when an error or an interrupt occurs in an
  122.  * interactive shell and control is returned to the main command loop.
  123.  */
  124.  
  125. void
  126. reset() {
  127.  
  128.       /* from eval.c: */
  129.       {
  130.           evalskip = 0;
  131.           loopnest = 0;
  132.           funcnest = 0;
  133.       }
  134.  
  135.       /* from input.c: */
  136.       {
  137.           if (exception != EXSHELLPROC)
  138.               parsenleft = 0;            /* clear input buffer */
  139.           popallfiles();
  140.       }
  141.  
  142.       /* from parser.c: */
  143.       {
  144.           tokpushback = 0;
  145.       }
  146.  
  147.       /* from redir.c: */
  148.       {
  149.           while (redirlist)
  150.               popredir();
  151.       }
  152.  
  153.       /* from output.c: */
  154.       {
  155.           out1 = &output;
  156.           out2 = &errout;
  157.           if (memout.buf != NULL) {
  158.               ckfree(memout.buf);
  159.               memout.buf = NULL;
  160.           }
  161.       }
  162. }
  163.  
  164.  
  165.  
  166. /*
  167.  * This routine is called to initialize the shell to run a shell procedure.
  168.  */
  169.  
  170. void
  171. initshellproc() {
  172.  
  173.       /* from eval.c: */
  174.       {
  175.           exitstatus = 0;
  176.       }
  177.  
  178.       /* from exec.c: */
  179.       {
  180.           deletefuncs();
  181.       }
  182.  
  183.       /* from input.c: */
  184.       {
  185.           popallfiles();
  186.       }
  187.  
  188.       /* from jobs.c: */
  189.       {
  190.           backgndpid = -1;
  191. #if JOBS
  192.           jobctl = 0;
  193. #endif
  194.       }
  195.  
  196.       /* from options.c: */
  197.       {
  198.           char *p;
  199.  
  200.           for (p = optval ; p < optval + sizeof optval ; p++)
  201.               *p = 0;
  202.       }
  203.  
  204.       /* from redir.c: */
  205.       {
  206.           clearredir();
  207.       }
  208.  
  209.       /* from trap.c: */
  210.       {
  211.           char *sm;
  212.  
  213.           clear_traps();
  214.           for (sm = sigmode ; sm < sigmode + MAXSIG ; sm++) {
  215.               if (*sm == S_IGN)
  216.                   *sm = S_HARD_IGN;
  217.           }
  218.       }
  219.  
  220.       /* from var.c: */
  221.       {
  222.           shprocvar();
  223.       }
  224. }
  225.